<?php

include_once "../../models/core.php";

$uid = $_POST["uid"]; // 更新头像的 form 表单是一个 post 请求
$files = $_FILES["file"]; // 下面函数的 $_FILES["file"] 就都可以用 $files 替换了


uploadAvatar($conn, $uid, $files); // 直接调用





// 封装成一个函数
// **解决连续换头像的问题**：下面函数里面的 echo 跳转，不管成功与否，都是要设置 uid 参数的哦
// **产生bug**：（这样就可一连续不断的换头像了，但是我们的 uid 就暴露了。所以得加验证来防止其他人修改别人的数据）
function uploadAvatar($conn, $uid, $files){
    // 允许上传的图片后缀
    // "text/plain", "image/gif", "image/jpeg", "image/jpg", "image/pjpg", "image/x-png", "image/png"
    $allowedExts = array("txt", "gif", "jpeg", "jpg", "png");
    ini_set('upload_max_filesize', '10M'); // 设置 txt 文件可上传的大小
    $temp = explode(".", $_FILES["file"]["name"]);
    echo "文件大小: " . $_FILES["file"]["size"] . "<br>"; // 文件大小
    $extension = end($temp); // 获取文件后缀名


    if((($_FILES["file"]["type"] == "text/plain")
    || ($_FILES["file"]["type"] == "image/gif")
    || ($_FILES["file"]["type"] == "image/jpeg")
    || ($_FILES["file"]["type"] == "image/jpg")
    || ($_FILES["file"]["type"] == "image/pjpg")
    || ($_FILES["file"]["type"] == "image/x-png")
    || ($_FILES["file"]["type"] == "image/png"))
    && $_FILES["file"]["size"] < 2048000
    && in_array($extension, $allowedExts)){
        if($_FILES["file"]["error"] > 0){
            echo "错误：" . $_FILES["file"]["error"] . "<br>";
            return;
        }else{
            // echo "上传文件名：" . $_FILES["file"]["name"] . "<br>";
            // echo "文件类型：" . $_FILES["file"]["type"] . "<br>";
            // echo "文件大小：" . ($_FILES["file"]["size"] / 1024) . " KB<br>";
            // echo "文件临时存储的位置：" . $_FILES["file"]["tmp_name"] . "<br>";
        }

        // 判断 ../../static/img/user/person/ 目录是否存在该文件
        // 如果没有，你需要创建它，权限为 777
        if(file_exists("../../static/img/user/person/" . $_FILES["file"]["name"])){
            echo $_FILES["file"]["name"] . " 文件已经存在。";

            // 虽然文件已经存在，但是还是要更新数据库的 avatar 字段的（数据库的 avatar 字段表示的是当前头像在 server 端的图片路径）
            $avatarPath = "../../static/img/user/person/" . $_FILES["file"]["name"]; // 头像图片的存储路径
            // 更新数据库的代码
            updateMysqlAvatar($conn, $avatarPath, $uid);

            // 不管提交成功与否，都要跳转回去的哦
            echo "<script>alert('文件已经存在!!!'); window.location.href='../../views/user/person.html?uid={$uid}'</script>";
        }else{
            move_uploaded_file($_FILES["file"]["tmp_name"], "../../static/img/user/person/" . $_FILES["file"]["name"]);
            // echo "文件存储在：" . "../../static/img/user/person/" . $_FILES["file"]["name"];
            $avatarPath = "../../static/img/user/person/" . $_FILES["file"]["name"]; // 头像图片的存储路径

            // 更新数据库的代码
            updateMysqlAvatar($conn, $avatarPath, $uid);
            
            // 不管提交成功与否，都要跳转回去的哦
            echo "<script>alert('头像图片提交成功!!!'); window.location.href='../../views/user/person.html?uid={$uid}'</script>";
        }
    }else{
        echo "非法的文件格式";

        // 非法文件
        echo "<script>alert('非法文件!!!'); window.location.href='../../views/user/person.html?uid={$uid}'</script>";
    }
}


// 更新数据库的代码
function updateMysqlAvatar($conn, $avatarPath, $uid){
    $sql = "UPDATE users SET avatar = ? WHERE uid = ?";
    $mysqli_stmt = $conn->prepare($sql); // 准备预处理语句

    // s: string/date   i: int
    $mysqli_stmt->bind_param('si', $avatarPath, $uid);
    // 执行预处理的语句
    if($mysqli_stmt->execute()){
        // echo $mysqli_stmt->insert_id; // 程序执行成功，返回插入数据表的行 id
        echo PHP_EOL;
    }else{
        echo $mysqli_stmt->error; // 执行失败，展示错误信息
    }
    // 释放结果集
    $mysqli_stmt->free_result();
    $mysqli_stmt->close();
    $conn->close();
}
